import numpy as np
import matplotlib.pyplot as plt

def numerical_diff(f,x):
    h = 1e-4 # 0.0001
    return (f(x+h)-f(x-h))/(2*h)

def function_1(x):
    return 0.01*x**2+0.1*x

def tangent_line(f,x):
    d = numerical_diff(f,x) # 切线的斜率
    y = f(x) - d*x # 使用直线的斜截式，令x=0,求出的y即为切线的截距

    return lambda t: d*t+y

if __name__ == '__main__':
    x = np.arange(0.0, 20.0, 0.1)
    y = function_1(x)

    plt.plot(x,y)
    plt.xlabel('x')
    plt.ylabel('f(x)')

    tf = tangent_line(function_1,5)
    y2 = tf(x)
    plt.plot(x,y2)
    
    plt.show()

    print(numerical_diff(function_1,5))
    print(numerical_diff(function_1,10))